package cn.fansunion.leecode.isNumber;

import java.util.List;

import cn.fansunion.leecode.kit.Kit;

/**
 * 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。

回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @author wen.lei@brgroup.com
 *
 *         2022-1-7
 */
public class PalindromeNumber {


    /**
     * 是否为回文数：取模取余，获得整数各个位置的数字;左右比较，双指针 (看了下网友和官方的代码，我这个可读性是比较高的)
     * @param x
     * @return
     */
    public boolean isPalindrome(int x) {
        //所有负数都不可能是回文
        if (x < 0) {
            return false;
        }
        List<Integer> list = Kit.intToDigitListDesc(x);
        //左右比较，双指针
        for (int start = 0, end = list.size() - 1; start < end; start++, end--) {
            if (!list.get(start).equals(list.get(end))) {
                return false;
            }
        }
        return true;
    }

    /**
     * 是否为回文数：number->str 进阶：你能不将整数转为字符串来解决这个问题吗？
     * @param x
     * @return
     */
    public boolean isPalindromeStr(int x) {
        if (x < 0) {
            return false;
        }
        String numStr = String.valueOf(x);
        //左右比较，双指针
        for (int start = 0, end = numStr.length() - 1; start < end; start++, end--) {
            if (numStr.charAt(start)!=numStr.charAt(end)) {
                return false;
            }
        }
        return true;
    }
}
